#!/usr/bin/perl
#---------------------------------------------------------
# в этом участке кода производится парсинг строки
# пример строки "15 18 40 70", результат записывается в массив в виде
# array[0]=15
# array[1]=18 и т.д.
# Необходимо обратить внимание на то какой вид иммеет входящая строка.
# Разберем на нашем примере.
# Наша строка содержит 4 пары чисел, но нарисует она только 2 корабля соответсвенно.
# Программа разбивает пары чисел таким образом, что
# (1,5) и (1,8) - это 2 противополодные вершины.
# При вводе строки необходимо подавать на вход координаты левой верхней вершины и
# правой нижней.
# При этом необходимо учитывать, что при вводе вершин для одного корабля, 
# либо 1 и 3 числа должны быть одинаковые (15 18),
# либо 2 и 4 должны быть одинаковы (40 70)
#---------------------------------------------------------

use 5.010; #минимальная версия перла, на которой будет запускаться
#use strict; #строгое следование правилам перла
use warnings;
use POSIX;
use Term::Cap;

init();                     # Инициализация Term::Cap.
# Переместить курсор в конкретную позицию.
sub gotoxy {
    my($x, $y) = @_;
    $tcap->Tgoto('cm', $y, $x, *STDOUT);
} 

# Определить скорость терминала через модуль POSIX и использовать 
# для инициализации Term::Cap.
sub init { 
    my $termios = POSIX::Termios->new();
    $termios->getattr;
    my $ospeed = $termios->getospeed;
    $tcap = Term::Cap->Tgetent ({ TERM => undef, OSPEED => $ospeed });
    $tcap->Trequire(qw(cl cm cd));
}
#---------------------------------------------------------
sub draw_field
{
#прорисовка поля
	system('/usr/bin/clear');
	print "  0 1 2 3 4 5 6 7 8 9 \n";		#прорисовка поля
	for (my $i=0; $i<10; $i++)
	{								
		#print "$i --------------------";
		print "$i ░░░░░░░░░░░░░░░░░░░░";
		print "\n";
	}
}
#---------------------------------------------------------

sub parsing
{
	my $str=$ARGV[0];
	$str=~s/\s//g;				#убираем пробелы из строки
	my $lenght=length($str);  	#вычисление длины строки
	my $count=0;
	my $substr;
	my @array;

	while($count <= $lenght)
	{
		$array[$count]= substr $str, $count, 1;
		$count++;
	}
	$amount_param=($count-1)/2; 	#кол-во параматров(координат 												кораблей)

draw_field;
#-------------------------------------
#прорисовка кораблей
#-------------------------------------

	for (my $g=0 ; $g<($count-1) ; $g++)
	{
		my $coord_beg_x=$array[$g];
		my $coord_beg_y=$array[$g+1];
		my $coord_end_x=$array[$g+2];
		my $coord_end_y=$array[$g+3];

		$coord_beg_x++; 	# (1,2) - начало координат у 											#нашего поля
		$coord_beg_y=$coord_beg_y+$coord_beg_y+2;	#сдвигаем курсор на 													начало координат нашего 													поля
		$coord_end_x++; 										
		$coord_end_y=$coord_end_y+$coord_end_y+2;
		
		#цикл ответственен за столбцы
		for (my $i=$coord_beg_y;$i<=$coord_end_y;$i++)		
		{	
			gotoxy($coord_beg_x, $i); #сдвигаем курсор на заданные координаты
			print "██";  
		}
		#цикл ответственен за строки
		for (my $i=$coord_beg_x;$i<=$coord_end_x;$i++)		
		{		   					
			gotoxy($i, $coord_beg_y); 
			print "██"; 
		}
		$g=$g+3;
	}
gotoxy(40,0);
}

parsing;
